package config

import (
	"fmt"
	"github.com/spf13/viper"
	"go-iot-project/pkg/app"
	"go-iot-project/pkg/cache"
	"go-iot-project/pkg/db"
	"go-iot-project/pkg/utils"
	"path/filepath"
)

var Engine *Config

func InitConfig(configFilePath string) {
	// 获取启动参数中，配置文件的绝对路径
	path, _ := filepath.Abs(configFilePath)

	// 读取配置文件信息
	config := &Config{}
	if err := utils.LoadYml(path, config); err != nil {
		panic(any(fmt.Sprintf("读取配置文件[%s]失败: %s", path, err.Error())))
	}

	Engine = config
}

type Config struct {
	MySql      *db.MySqlConfig    `yaml:"mysql" json:"mysql"`
	App        app.App            `yaml:"app" json:"app"`
	Redis      *cache.RedisConfig `yaml:"redis" json:"redis"`
	MqttConfig *MqttConfig        `yaml:"mqtt" json:"mqtt"`
}

func init() {
	name := utils.AppName()     // 获取程序名
	viper.SetConfigName(name)   // 设置文件名
	viper.SetConfigType("yaml") // 设置文件类型
	viper.AddConfigPath(".")    // 添加路径
}

// GetString 获取配置字符串
func GetString(module string, key string) string {
	return viper.GetString(module + "." + key)
}
